#!/bin/bash
#Comando Listener
#
#Descripcion
#El proposito de este comando es detectar la llegada de archivos al directorio $NOVEDIR y aceptar o recharzar los mismos.
#

#NOVEDIR="/Users/matias/Dropbox/UBA/SistemasOperativos/TPSO/arribos"
#MAEDIR="/Users/matias/Dropbox/UBA/SistemasOperativos/TPSO/mae"
#ACEPDIR="/Users/matias/Dropbox/UBA/SistemasOperativos/TPSO/aceptadas"
#RECHDIR="/Users/matias/Dropbox/UBA/SistemasOperativos/TPSO/rechazados"


COMANDO="Listener.sh"

#Chequeo que el ambiente este inicializado
if [[ -z "$BINDIR" ]]; then
	./Logging.sh $COMANDO "Ambiente no inicializado correctamente. Ejecute el Initializer.sh primero." "E"
	exit 1
fi

#Contador de ciclos
numCiclo=0
sleepTime=60 #en segundos.

while [[ true ]]; do
	#Iniciando ciclo
	numCiclo=$(($numCiclo+1))
	./Logging.sh $COMANDO "Ciclo $numCiclo iniciado." "I"


	#Recorrer archivos en el directorio de novedades por los que matchean con el formato de lista de compras.
	for file in $(ls $NOVEDIR | grep '^[a-zA-Z]*\.[^-\ ]\{3\}$'); do
		username=${file%%.*}
		#Veo que sea un archivo de texto comun
		if [ ! -f "$NOVEDIR/$file" ]; then
			./Logging.sh $COMANDO  "archivo $file formato invalido." "I"
			Mover.sh "$NOVEDIR/$file" "$RECHDIR/$file" $COMANDO
		#Veo que el nombre de usuario figure en el listado de asociados
		elif [[ 1 -eq $(grep -c ";$username;" $MAEDIR/asociados.mae) ]]; then
			./Logging.sh $COMANDO "archivo $file valido" "I"
			Mover.sh "$NOVEDIR/$file" "$ACEPDIR/$file" $COMANDO
		else
			./Logging.sh $COMANDO "archivo $file invalido. $username inexistente." "I"
			Mover.sh "$NOVEDIR/$file" "$RECHDIR/$file" $COMANDO
		fi
	done

	#Recorrer archivos en el directorio de novedades por los que matchean con el formato de lista de precios.
	for file in $(ls $NOVEDIR | grep '^\w*-[0-9]\{8\}\.[a-zA-Z]*'); do
		username=${file##*.}
		#Veo que sea un archivo de texto comun
		if [ ! -f "$NOVEDIR/$file" ]; then
			./Logging.sh $COMANDO "archivo $file con formato invalido." "I"
			Mover.sh "$NOVEDIR/$file" "$RECHDIR/$file" $COMANDO

		#Veo que el nombrede usuario sea valido y que sea un colaborador
		elif [[ 1 -eq $(grep -c ";$username;1;" $MAEDIR/asociados.mae) ]]; then
			fecha=${file##*-}
			fecha=${fecha%%.*}
			fecha=$(date -d $fecha '+%s')
			fecha1=$(date -d 20140101 '+%s')
			hoy=$(date '+%s')
			if [[ $fecha > $fecha1 ]]; then
		 		if [[ $hoy > $fecha ]]; then
					./Logging.sh $COMANDO "Archivo $file valido." "I"
					Mover.sh "$NOVEDIR/$file" "$MAEDIR/precios/$file" $COMANDO
				else
					./Logging.sh $COMANDO "Archivo $file invalido. La fechas $fecha es mayor al dia de hoy." "I"
					Mover.sh "$NOVEDIR/$file" "$RECHDIR/$file" $COMANDO
				fi
			else
				./Logging.sh $COMANDO "Archivo $file invalido. La fecha $fecha es anterior al 2014/01/01." "I"
				Mover.sh "$NOVEDIR/$file" "$RECHDIR/$file" $COMANDO
			fi	
		else
			./Logging.sh $COMANDO "Archivo $file invalido. El usuario $username no es colaborador." "I"
			Mover.sh "$NOVEDIR/$file" "$RECHDIR/$file" $COMANDO
		fi
	done

	#Recorro los demas archivos en el directorio y ya que no coincidian con ninguno de los criterios anteriores los rechazo
	for file in $(ls $NOVEDIR); do
		./Logging.sh $COMANDO "archivo: $file invalido. No matcheo los criterios anteriores." "I"
		Mover.sh "$NOVEDIR/$file" "$RECHDIR/$file" $COMANDO
	done

	if [[ "0" != $(ls "$MAEDIR/precios" | grep -c '^\w*-[0-9]\{8\}\.[a-zA-Z]*') ]]; then
		if [[ ! -z $(obtpid.sh "Masterlist.sh") || ! -z $(obtpid.sh "Rating.sh") ]]; then
			./Logging.sh $COMANDO "Llamada a Masterlist.sh pospuesta." "I"
		else
			./Logging.sh $COMANDO "Iniciando Masterlist." "I"
			Masterlist.sh &
			masterlistID=$(obtpid.sh "Masterlist.sh")
			echo "Masterlist iniciado con ID: $masterlistID"
			./Logging.sh $COMANDO "Masterlist iniciado con ID: $masterlistID" "I"
		fi
	fi

	if [[ "0" != $(ls $ACEPDIR | grep -c '^[a-zA-Z]*\.[^-\ ]\{3\}$') ]]; then
		if [[ ! -z $(obtpid.sh "Masterlist.sh") || ! -z $(obtpid.sh "Rating.sh") ]]; then
			./Logging.sh $COMANDO "Llamada a Rating.sh pospuesta." "I"
		else
			./Logging.sh $COMANDO "Iniciando Rating." "I"
			Rating.sh &
			ratingpid=$(obtpid.sh "Rating.sh")
			echo "Rating iniciado con ID: $ratingpid"
			./Logging.sh $COMANDO "Rating iniciado con ID: $ratingpid" "I"
		fi
	fi



	sleep $sleepTime
done
